<?php
use think\Cache;
use app\admin\model\Course;
use app\admin\model\Clbum;
use app\admin\model\StudentCourse;
use app\admin\model\StudentClbum;
use app\admin\model\Student;
use app\admin\model\StudentAttend;

/**
 * 检测用户是否登录
 * @return integer 0-未登录，大于0-当前登录用户ID
 */
function is_login(){
    $user = session('user_auth');
    if (empty($user)) {
        return 0;
    } else {
        return session('user_auth_sign') == data_auth_sign($user) ? $user['uid'] : 0;
    }
}

/**
 * 检测当前用户是否为管理员
 * @return boolean true-管理员，false-非管理员
 */
function is_administrator($uid = null){
    $uid = is_null($uid) ? is_login() : $uid;
    return $uid && (intval($uid) === config('user_administrator'));
}

/**
 * 后台公共文件
 * 主要定义后台公共函数库
 */

// 获取数据的状态操作
function show_state_op($status) {
    switch ($status){
        case 0  : return    '启用';     break;
        case 1  : return    '禁用';     break;
        case 2  : return    '审核';       break;
        default : return    false;      break;
    }
}

/**
 * XXX
 * 获取配置的类型
 * @param string $type 配置类型
 * @return string
 */
function get_config_type($type=0){
    $list = \think\Config::get('config_type_list');
    return isset($list[$type])?$list[$type]:'';
}
/**
 * XXX
 * 获取充值类型
 */
function get_pay_type($type = 0) {
    $list = \think\Config::get('course_pay_type');
    return isset($list[$type])?$list[$type]:'扣减课时';
}

/**
 * XXX
 * 获取配置的分组
 * @param string $group 配置分组
 * @return string
 */
function get_config_group($group=0){
    $list = \think\Config::get('config_group_list');
    return isset($list[$group])?$list[$group]:'';
}

/**
 * XXX
 * 获取配置的分组
 * @param string $group 配置分组
 * @return string
 */
function get_student_level($level=0){
    $list = \think\Config::get('student_level_list');
    return isset($list[$level])?$list[$level]:'';
}

/**
 * XXX
 * select返回的数组进行整数映射转换
 * @param array $map  映射关系二维数组  array(
 *                                          '字段名1'=>array(映射关系数组),
 *                                          '字段名2'=>array(映射关系数组),
 *                                           ......
 *                                       ) * 
 * @return array
 *  array(
 *      array('id'=>1,'title'=>'标题','state'=>'1','state_text'=>'正常')
 *      ....
 *  )
 *
 */
function int_to_string(&$data,$map=['state'=>[1=>'正常',-1=>'删除',0=>'禁用',2=>'未审核',3=>'草稿']]) {
    if($data === false || $data === null ){
        return $data;
    }
    $data = (array)$data;
    foreach ($data as $key => $row){
        foreach ($map as $col=>$pair){
            if(isset($row[$col]) && isset($pair[$row[$col]])){
                $data[$key][$col.'_text'] = $pair[$row[$col]];
            }
        }
    }
    return $data;
}

/**
 * 动态扩展左侧菜单,base.html里用到 * 
 */
function extra_menu($extra_menu,&$base_menu){
    foreach ($extra_menu as $key=>$group){
        if( isset($base_menu['child'][$key]) ){
            $base_menu['child'][$key] = array_merge( $base_menu['child'][$key], $group);
        }else{
            $base_menu['child'][$key] = $group;
        }
    }
}

/**
 * 获取行为数据
 * @param string $id 行为id
 * @param string $field 需要获取的字段
 * 
 */
function get_action($id = null, $field = null){
    if(empty($id) && !is_numeric($id)){
        return false;
    }
    $list = cache('action_list');
    if(empty($list[$id])){
        $map = array('state'=>array('gt', -1), 'id'=>$id);
        $list[$id] = db('Action')->where($map)->field(true)->find();
    }
    return empty($field) ? $list[$id] : $list[$id][$field];
}

/**
 * 获取行为类型
 * @param intger $type 类型
 * @param bool $all 是否返回全部类型
 * 
 */
function get_action_type($type, $all = false){
    $list = array(
        1=>'系统',
        2=>'用户',
    );
    if($all){
        return $list;
    }
    return $list[$type];
}
/**
 * XXX
 * 根据用户ID获取课程名称
 */
function get_student($id, $field = 'name'){
    return Student::where('id', $id)->value($field);
}
/**
 * XXX
 * 根据用户ID获取课程名称
 */
function get_course($id, $field = 'name'){
    return Course::where('id', $id)->value($field);
}
/**
 * XXX
 * 获取课程列表,用于创建班级 
 */
function get_course_list(){
    return Course::column('name','id');
}

/**
 * XXX
 * 获取学员未选课列表
 */
function get_student_course_list($student_id, $course_id = null){
    $map = ['student_id'=>$student_id];
    if ($course_id){
        $map['course_id'] = ['neq', $course_id];
    }
    $ids = StudentCourse::where($map)->column('course_id');
    $where = [];
    if (!empty($ids)){
        $where['id'] = ['not in', $ids];
    }
    return Course::where($where)->column('name','id');
}
/**
 * XXX
 * 根据用户ID获取班级名称
 */
function get_clbum($id, $field = 'name'){
    return Clbum::where('id', $id)->value($field);
}
/**
 * XXX
 * 获取学员未加入班级列表
 */
function get_student_clbum_list($student_id, $clbum_id = null){
    $map = ['student_id'=>$student_id];
    //学生选课列表
    $courseIds = StudentCourse::where($map)->column('course_id');
    if ($clbum_id){
        $map['clbum_id'] = ['neq', $clbum_id];
    }
    $ids = StudentClbum::where($map)->column('clbum_id');
    
    $where['course_id'] = ['in', $courseIds];
    if (!empty($ids)){
        $where['id'] = ['not in', $ids];
    }
    return Clbum::where($where)->column('name','id');
}
/**
 * 获取用户加入班级列表
 */
function get_student_join_clbum_list($student_id){
    $map = ['student_id'=>$student_id];
    $ids = StudentClbum::where($map)->column('clbum_id');
    $where['id'] = ['in', $ids];
    return Clbum::where($where)->column('name','id');
}
/**
 * XXX
 * 获取学员列表,用于邀请记录
 */
function get_student_list() 
{
    return Student::column('name','id');
}

/**
 * 检查是否已上课
 * @date: 2017年8月8日 下午10:56:39
 * @author: hxzlh
 * @param unknown $clbum_id
 * @param unknown $student_id
 * @return boolean
 */
function checkAttend($clbum_id,$student_id)
{
    $clbum = Clbum::get($clbum_id);//获取班级信息
    $week = weekFormat(true);//格式化星期
    $time = $week[$clbum['day_week']];//获取班级在本周的日期开始
    $where['create_time'] = ['egt', $time];
    $where['student_id'] = $student_id;
    $where['clbum_id'] = $clbum_id;
    return StudentAttend::get($where) ? true : false;
}
/**
 * 格式化日期
 * @date: 2017年8月8日 下午10:52:45
 * @author: hxzlh
 * @return unknown[]
 * @return: return
 */
function weekFormat($timestrap = false)
{
    $res = [];
    $timestr = time();
    $now_day = date('w',$timestr) ?: 7;//星期几
    for ($i=1;$i<8;$i++) {
        $time = $timestr - ($now_day-$i)*60*60*24;
        if (!$timestrap) {
            $time = date('Y-m-d', $time);
        }
        $res[$i] = $time;
    }
    return $res;
}

function weekFormat2($timestrap = false)
{
    $date = new \DateTime();
    for ($i=1;$i<8;$i++) {
        $date->modify('this week +'.($i-1).' days');
        if (!$timestrap) {
            $time = $date->format ( 'Y-m-d' );
        } else {
            $time = $date -> getTimestamp();
        }
        $res[$i] = $time;
    }
    return $res;
}

function getStudentByPhone($phone) 
{
    $where['phone'] = $phone;
    return Student::get($where);
}
